Ok(())
}
+fn get_environment_variable(variables: &[&str] ) -> Option<String>{
+ variables.iter()
+ .filter_map(|var| env::var(var).ok())
+ .next()
+}
+
fn discover_author() -> CargoResult<(String, Option<String>)> {
let git_config = GitConfig::open_default().ok();
let git_config = git_config.as_ref();
+ let name_variables = ["NAME", "GIT_AUTHOR_NAME", "GIT_COMMITTER_NAME",
+ "USER", "USERNAME"];
let name = git_config.and_then(|g| g.get_string("user.name").ok())
- .or_else(|| env::var("USER").ok()) // unix
- .or_else(|| env::var("USERNAME").ok()); // windows
+ .or_else(|| get_environment_variable(&name_variables));
+
let name = match name {
Some(name) => name,
None => {
username_var)
}
};
+ let email_variables = ["EMAIL", "GIT_AUTHOR_EMAIL", "GIT_COMMITTER_EMAIL"];
let email = git_config.and_then(|g| g.get_string("user.email").ok())
- .or_else(|| env::var("EMAIL").ok());
+ .or_else(|| get_environment_variable(&email_variables) );
let name = name.trim().to_string();
let email = email.map(|s| s.trim().to_string());
assert!(contents.contains(r#"authors = ["bar <baz>"]"#));
});
+test!(finds_git_email{
+ let td = TempDir::new("cargo").unwrap();
+ assert_that(cargo_process("new").arg("foo")
+ .env("GIT_AUTHOR_NAME", "foo")
+ .env("GIT_AUTHOR_EMAIL", "gitfoo")
+ .cwd(td.path().clone()),
+ execs().with_status(0));
+
+ let toml = td.path().join("foo/Cargo.toml");
+ let mut contents = String::new();
+ File::open(&toml).unwrap().read_to_string(&mut contents).unwrap();
+ assert!(contents.contains(r#"authors = ["foo <gitfoo>"]"#), contents);
+});
+
+
+test!(finds_git_author{
+ // Use a temp dir to make sure we don't pick up .cargo/config somewhere in
+ // the hierarchy
+ let td = TempDir::new("cargo").unwrap();
+ assert_that(cargo_process("new").arg("foo")
+ .env_remove("USER")
+ .env("GIT_COMMITTER_NAME", "gitfoo")
+ .cwd(td.path().clone()),
+ execs().with_status(0));
+
+ let toml = td.path().join("foo/Cargo.toml");
+ let mut contents = String::new();
+ File::open(&toml).unwrap().read_to_string(&mut contents).unwrap();
+ assert!(contents.contains(r#"authors = ["gitfoo"]"#));
+});
+
test!(author_prefers_cargo {
::process("git").args(&["config", "--global", "user.name", "foo"])
.exec().unwrap();